#1 导入依赖
import requests
from lxml import etree

#2 发送请求和获取响应
html = requests.get('https://www.dushu.com/lianzai/1126.html')
html.encoding='utf-8'
html_text2 = html.text
# print(html_text2)


#2.2 创建节点树的第二种方式：如果爬取的html文本如何转换为节点树?
# 解析html文件，返回一个节点树的对象
html_selector = etree.HTML(html_text2)

#3 获取根节点html的元素
'''参考思路：先获取图片路径，再获取书名、作者、描述。最后把这4个信息一对一组装起来。

标准：
1、能通过requests访问指定网址拿到html响应内容 20%
2、能获取图片路径 20%，书名10%、作者20%、描述10%
3、能把上述内容组装成如下截图 10%，把如下截图内容保存为文本txt文件10%
爬取内容能运行，但是有错误（对不上）则只算该项完成一半进度'''

#3.1先获取图片路径
imgs=html_selector.xpath("/html/body/div[6]/div/div[2]/div[2]/ul/li/div/div/a/img/@data-original")
print(len(imgs))
#3.2再获取书名
booknames=html_selector.xpath("/html/body/div[6]/div/div[2]/div[2]/ul/li/div/h3/a/text()")
print(len(booknames))
#3.3再获取作者名
# authors=html_selector.xpath("/html/body/div[6]/div/div[2]/div[2]/ul/li/div/p[1]/text()")
# print(authors)

# 检查后发现作者名得到的并不完整，需要用代码补全，有的是有a标签
# 第2种思路，直接用//text()获取p标签下面所有文本和子标签的文本，会多1个
# authors=html_selector.xpath("/html/body/div[6]/div/div[2]/div[2]/ul/li/div/p[1]//text()")
# print(authors)
# print(len(authors))#41
# 第3种思路，直接用//text()获取p标签下面所有文本和子标签的文本，拼接
# authors=html_selector.xpath("/html/body/div[6]/div/div[2]/div[2]/ul/li/div/p[1]/text()")
# print(authors)
# print(len(authors))#33
# authors=html_selector.xpath("/html/body/div[6]/div/div[2]/div[2]/ul/li/div/p[1]//a/text()")
# print(authors)
# print(len(authors))#8

#
author_1 = html_selector.xpath('/html/body/div[6]/div/div[2]/div[2]/ul/li/div/p[1]')
authors = []
for element in author_1:
    author_text = ''.join(element.xpath('.//text()')).strip()
    print(element.xpath('.//text()'))
    authors.append(author_text)

print(len(authors))

#获取一段话描述
descriptions=html_selector.xpath("/html/body/div[6]/div/div[2]/div[2]/ul/li/div/p[2]/text()")
print(len(descriptions))

print(type(descriptions))#<class 'list'>

# zipped_lists = zip(imgs, booknames, authors2,descriptions)
# # print(zipped_lists)
#
#
#
# with open("./books.txt", 'w', encoding='utf-8') as file:
#     for i in zipped_lists:
#         file.write(str(i)+"\n")

